pub fn convert_base(num_str: &str, to_base: u32) -> String {
    /* 实现一个算法，支持任意2-16进制数之间转换，
    如：2进制转7进制，7进制转16进制，15进 制转8进制等。(20)
    输入: 9(10), 8 #输入两个参数：10进制的9(字符串)，转换目标进制8(数字)， 输出：11
    #返回结果，8进制的11(字符串)

    输入: 1111(2), 15 #输入2进制的1111，转换为15进制 输出：10(15)
    #返回结果，15进制的10(字符串)
    */
    assert!( to_base >= 2 && to_base <= 16, "need 2 <= to_base <= 16" );
    let byts :&[u8] = num_str.as_bytes();
    let l:usize = byts.len(); let mut i_p1:usize = 0; let mut i_p2:usize = 0;
    for i in 0..l {
        if byts[i] == (b'(' as u8) { 
            i_p1 = i
        }else if byts[i] == (b')' as u8) { 
            i_p2 = i
        }
    }
    assert!(i_p1 > 0 && i_p2 > i_p1, "num_str need xxx(base) format");
    let from_base :u32 = num_str[(i_p1+1)..i_p2].parse().unwrap();
    let mut val = u128::from_str_radix(&num_str[0..i_p1],from_base).unwrap();
    //
    let mut ret = Vec::new();
    while val > 0 { 
        //从低位到高位循环做除法
        let yushu = (val % to_base as u128) as u32;
        val /= to_base as u128;
        ret.insert(0,trans_09af(yushu as u8));
    }

    if ret.is_empty() {
        "0".into()
    } else {
        String::from_utf8(ret).unwrap()
    }
}

fn trans_09af(num: u8) -> u8 {
    if num < 10 {
        num + b'0'
    } else {
        num + b'a' - 10
    }
}

